package org.jeecg.modules.scm.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.vo.ScmResInfoVo;
import org.jeecg.modules.scm.dto.BankLendingDto;
import org.jeecg.modules.scm.dto.BankReviewDto;
import org.jeecg.modules.scm.entity.ScmFinaApply;
import org.jeecg.modules.scm.vo.FinaApplyTaskVo;
import org.springframework.web.multipart.MultipartFile;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @Description: scm_fina_apply
 * @Author: jeecg-boot
 * @Date:   2021-11-10
 * @Version: V1.0
 */
public interface IScmFinaApplyService extends IService<ScmFinaApply> {

//    /**工具方法，将finaTaskDto 转为 ScmFinaApply*/
//    public  ScmFinaApply FTDto2SFA(FinaTaskDto finaTaskDto);
//
//    /**创建某个核心融资申请key并绑定到数据库的融资申请中*/
//    public StartInstanceQuery finaApplyStart(Integer cusNo, String instanceName,Integer applyNo);

    /**
     * 新增检查
     * */
    public void check(ScmFinaApply scmFinaApply);

    /**
     * 检查该融资申请号是否已存在表中并且未启动
     * */
    public ScmFinaApply checkApply(Integer applyNo);

    /**
     * 根据id和指定字段更新数据
     * @param entity
     * @param id
     * */

    public void updateFinaApply(Integer id,ScmFinaApply entity);

    /**
     * 上传附件
     * */
    public String uploadAccessory(MultipartFile[] files, Integer applyNo);


    /**
     * 根据当前用户获取融资申请情况
     * @return
     * */
    public List<ScmFinaApply> getApplyInfo();

    /**
     * 根据当前用户获取可执行融资申请情况
     * @return
     * */
    public List<FinaApplyTaskVo> getExecutableApplyInfo();

    /**
     * 融资申请资金方校验
     * */
    public boolean checkInvestor(Integer investorId, Integer itemId, BigDecimal amount, Date applyDate, Date endDate);

    /**
     * 启动流程startInstance（客户号、机构号、业务种类、申请号数组），提交多条申请
     * */
    public ScmResInfoVo startInstance(Integer[] applyNos);

    /***
     * 自动审核业务代码
     * */
    public boolean autoReview(String userId,Integer applyNo);

    /**
     * 复核业务代码
     * */
    public void reCheck(ScmFinaApply scmFinaApply);


    /**
     * 银行审查
     * */
    public void bankReview(BankReviewDto bankReviewDto);


    /**
     * 申请人签约
     * */
    public void cusSigning(String contractNo);


    /**
     * 银行放款
     * */
    public void lending(BankLendingDto bankLendingDto);

    /**
     * 通知目标人员
     * */
    public void notice(String target);

    /**
     * 完成对应任务业务
     * @param applyNo
     * @param taskName
     * */
    public void executeTask(String taskName,Integer applyNo,Integer submitType,Integer backType);


    /**
     * 完成对应任务
     * */

    public Result<Boolean> processComplete(Integer applyNo,  String comment, Integer submitType,Integer backType);

    /**
     * 进度查询
     *
     * @return*/

    List<Map> processQuery(Integer applyNo, Integer pageNo, Integer pageSize);


     /**
      * 回撤业务
      * */
     public void backOp(Integer applyNo);

}
